Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@aller/cyclops-frontend-api

Package Overview
Dependencies
Maintainers
11
Versions
165
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aller/cyclops-frontend-api

Cyclops frontend API

  • 2.8.0
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
529
increased by51.58%
Maintainers
11
Weekly downloads
 
Created
Source

cyclops-frontend-api

API-part of the cyclops-frontend. This package contains all non-DOM changes, and interactions with CYCLOPS, from login, to payment-initiations, to user-fetching and whatnot. Below are more content and info on functions, schemas, interfaces that are being used in this package..

This package used to use Ajv for response-validation of the json schema. This package, it's validation vs unvalidated functions and tests have been removed to allow the client more controll of the response.

When fetching a user through /users/me a cyclops_seg cookie is set, if the user has adSegments as a property.

Please note that this library is still in active development..

Table of Contents

Design

Interfaces can be found in ./src/**/interface.ts.

Using the package

If you are not afraid of bloat, this package can be used with @aller/cyclops-frontend-api. If you are afraid of bloat, everything can be referenced with @aller/cyclops-frontend-api/lib/node|client/** (e.g. @aller/cyclops-frontend-api/lib/user/login). In this, you'll only include the parts of code you actually need, instead of the whole package.

For packages that require node-like environment-transpiled code, point to the lib/node folder, while client-side code should point to lib/client.

Functions

User

GET
/**
 * Get the current (possibly-cached) user based on
 * the cyclops-session cookie
 * Use this function if you want to check if a user is logged.
 */

async getCurrentUser(
    domain: string = '',
    options?: any
): Promise<IUser>
/**
 * Get the current non-cached user based on the
 * cyclops-session cookie
 * This function has a performance cost and should only be used
 * if the exact state of the user is required (minside)
 */

async getCannonicalUser(
    domain: string = '',
    options?: any
): Promise<IUser>

Subscription

/**
 * Sends a subscribe request to cyclops
 */

async subscribe(
  productId: string,
  accessCode: string,
  dealId: string,
  options?: any,
): Promise<boolean>
DELETE
/**
 * Get the current (possibly-cached) user
 * based on the cyclops-session cookie
 * Use this function if you want to check if a user is logged.
 */

async unsubscribe(
  productId: string,
  domain: string = '',
  options?: any
): Promise<boolean>

Payment

POST
/**
 * Initiates a payment for a product, and deal
 */

async initiatePayment(
  productId: string,
  dealId: string,
  options: IPaymentOptions = defaultPaymentOptions,
  domain: string = '',
  fetchOptions?: any
): Promise<IPaymentInitResponse>

Cyclops

GET
/**
 * Gets from cyclops
 */

async cyclopsGet<T>(
  path: string,
  options?: any,
  absoluteUrl?: boolean
): Promise<T>
POST
/**
 * Posts to cyclops
 */


async cyclopsPost<T>(
  path: string,
  data: any,
  options: any = {},
  version?: string,
): Promise<T> =>
DELETE
/**
 * Sends a delete request to cyclops
 */

async cyclopsDelete<T>(
  path: string,
  data: any,
  options: any = {},
): Promise<T>
Login/logout
/**
 * Initiates a cyclops login redirect. Redirect parameter
 * says whether to add a redirect url
 */

cyclopsLogin(
    redirect?: string,
    domain: string = '',
    options?: any
)
/**
 * Initiates a cyclops logout
 */

async cyclopsLogout(
    refresh: boolean = false,
    domain: string = '',
    options?: any
)
Listener

The listener-system is to allow for listening to requests being made to certain endpoints, in case you want a reactive component, be reactive on a separate component without a bunch of hacks

import { addListener, removeListener } from '@aller/cyclops-frontend-api/lib/client/cyclops/listener'

const listenerFunction = (event:CustomEvent) => {
  if(!event.detail) {
    return
  }

  DO YOUR STUFF HERE
}

addListener(ENDPOINT_URL_GOES_HERE, listenerFunction)


// Handle event, then remove
removeListener(ENDPOINT_URL_GOES_HERE, listenerFunction)

Catalogue

GET
/**
 * Gets catalogue and validates the response
 * to be valid ICatalogue
 */

async getCatalogue(
  domain: string = '',
  options?: any
): Promise<ICatalogue>

Constants

Cyclops

/**
 * Creates relative loginURL
 */

export const cyclopsLoginRelativeURL = (
  redirect?: string,
  domain: string = '',
  options?: any,
): string => {
  const red = redirect ? redirect : window.location.pathname;
  const relativeUrl = `${domain}${CYCLOPS_API}/login?cyclops-redirect=${red}`;
  return relativeUrl;
};
/**
 * Creates relative loginURL without utilizing any window
 * or document elements
 */

export const cyclopsLoginRelativeURLServer = (
  redirect?: string,
  domain: string = '',
  options?: any,
): string => {
  const red = redirect ? `?cyclops-redirect=${redirect}` : '';
  const relativeUrl = `${domain}${CYCLOPS_API}/${red}`;
  return relativeUrl;
};

Interfaces

User

interface IUser {
  readonly cyclopsId: string;
  readonly mediaConnectId: string;
  readonly aid: string;
  readonly email: string;
  readonly fullName: string;
  readonly phoneNumber: string;
  readonly subscriptions?: ReadonlyArray<ISubscription>;
  readonly newsletters?: ReadonlyArray<INewsletter>;
  readonly legacySubscriptions?: ReadonlyArray<ILegacySubscription>;
  readonly paymentHistory: IPaymentHistory;
  readonly adSegments?: ReadonlyArray<string>;
  readonly consents?: ReadonlyArray<IConsentType>;
  readonly newsletterPreferences?: ReadonlyArray<INewsLetterPreference>;
  readonly mobileSubscriptions?: IMobileSubscription[];
}

Subscription

interface IBaseSubscription {
  readonly productId: string;
  readonly status: 'ACTIVE' | 'CANCELLED';
}

interface ISubscription extends IBaseSubscription {
  readonly endDate?: string;
  readonly subscriptionId?: string;
  readonly startDate?: string;
  readonly nextChargeDate?: string;
  readonly chargeAmount?: number;
  readonly chargeInterval?: string;
  readonly dealId?: string;
}

interface ILegacySubscription extends IBaseSubscription {}

interface IMobileSubscription extends IBaseSubscription {
  readonly endDate?: string;
  readonly subscriptionId?: string;
  readonly startDate?: string;
  readonly dealId?: string;
  readonly dataGb?: string;
  readonly phoneNumber?: string;
  readonly signupDate?: string;
  readonly chargeAmount?: number;
  readonly chargeInterval?: string;
}

Newsletter

interface INewsletter {
  readonly newsletterId: string;
  readonly site: string;
}

Product

interface IProduct {
  readonly productName: string;
  readonly productDescription: string;
  readonly productId: string;
  readonly productLogo: string;
  readonly productType: 'digital' | 'print';
  readonly deals: ReadonlyArray<IProductDeal>;
}
interface IProductDeal {
  readonly dealName: string;
  readonly dealDescription: string;
  readonly dealId: string;
  readonly dealLogo: string;
  readonly fullTermsDescription: string;
}

Payment

type TPaymentProvider = 'vipps' | 'nets';
interface IPaymentInitRequest {
  productId: string;
  dealId: string;
  embeddedCheckoutUrl: string;
  allowUnauthenticatedCheckout: boolean;
  paymentProvider?: TPaymentProvider;
  redirectURL?: string;
}
interface IPaymentInitResponse {
  paymentId: string;
  paymentProvider: TPaymentProvider;
  reservationId?: string;
  confirmationUrl?: string;
}
interface IPaymentOptions {
  allowUnauthenticatedCheckout?: boolean;
  embeddedCheckoutUrl?: string;
  paymentProvider?: TPaymentProvider;
  redirectURL?: string;
}

Catalogue

interface ICatalogue {
  readonly brands: ReadonlyArray<IBrand>;
}

Brand

interface IBrand {
  readonly brandName: string;
  readonly brandDescription: string;
  readonly brandId: string;
  readonly brandLogo: string;
  readonly products: ReadonlyArray<IProduct>;
}

Keywords

FAQs

Package last updated on 18 Apr 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc